<?php

/**
 * This is the model class for table "aluno".
 *
 * The followings are the available columns in table 'aluno':
 * @property integer $id
 * @property integer $responsavel_id
 * @property integer $pessoa_id
 * @property integer $polo_id
 * @property integer $atendente_id
 * @property string $foto
 * @property string $renda_familiar
 * @property string $situacao_escolar
 * @property string $certidao_numero
 * @property string $certidao_folha
 * @property string $certidao_livro
 * @property string $certidao_cartorio
 * @property string $tipo_sanguineo
 * @property string $estado_civil
 * @property string $profissao
 * @property string $bairro
 * @property string $zona
 * @property string $ponto_referencia
 * @property string $ocupacao_imovel
 * @property string $tipo_habitacao
 * @property string $hidraulica
 * @property string $eletrica
 * @property string $nome_escola
 * @property string $zona_escola
 * @property string $inicio_deficiencia
 * @property string $observacao
 * @property string $falar_tele
 * @property string $falar_cel
 * @property string $status
 * @property string $data_entrada
 *
 * The followings are the available model relations:
 * @property Funcionario $atendente
 * @property Polo $polo
 * @property Pessoa $pessoa
 * @property Responsavel $responsavel
 * @property AlunoHasCaracteristica[] $alunoHasCaracteristicas
 * @property Triagem[] $triagems
 * @property TurmaHasAluno[] $turmaHasAlunos
 */
class Aluno extends CActiveRecord
{
	public $image;

	public $search_genero;
	public $search_nome;
	
	public static $situacoes_escolares = array (
			'Estuda' => 'Estuda',
			'Nao Estuda' => 'Não Estuda',
			'Nunca Estudou' => 'Nunca Estudou',
			'Estudo Concluído' => 'Estudo Concluído',
			'Outros' => 'Outros',
	);
	
	
	public static function getModuleName() {
		if( Yii::app() ->session['polo_id'] == 1) {
			return "Aluno/Paciente";
		} 
		return "Aluno";
	}

	public static $estados_civis = array (
			'Solteiro' => 'Solteiro',
			'Casado' => 'Casado',
			'Viuvo' => 'Viúvo',
			'Uniao Estavel' => 'União Estável',
			'Divorciado' => 'Divorciado',
			'Separado' => 'Separado',
			'Outros' => 'Outros',
	);

	public static $profissoes = array (
			'Desempregado' => 'Desempregado',
			'Estudante' => 'Estudante',
			'Autonomo' => 'Autônomo',
			'Sem ocupacao' => 'Sem ocupação',
			'Funcionario Publico' => 'Funcionário Público',
			'Inicia. Privada' => 'Inicia. Privada',
			'Aposentado' => 'Aposentado',
			'Aposent. Invalidez' => 'Aposent. Invalidez',
			'Auxilio doenca' => 'Auxílio doença',
			'BPC' => 'BPC',
			'Outros' => 'Outros',
	);
	public static $triagem = array(
			'Coracao' => 'Tem problema de Coração?',
			'Pulmao' => 'Tem problema de Pulmão?',
			'Figado' => 'Tem problema de Fígado (gastro/hepático)?',
			'Alergia' => 'Tem problema de Alergia?',
			'Asma' => 'Tem problema de Asma?',
			'Pressao' => 'Tem problema de pressão baixa ou alta?',
			'Diabete' => 'Tem problema de Diabete?',
			'Doenca' => 'Tem problema de doença sexualmente transmissível?',
			'Medicamento' => 'Toma medicamento controlado?',
	);

	public static $zonas = array (
			'Leste' => 'Leste',
			'Oeste' => 'Oeste',
			'Norte' => 'Norte',
			'Sul' => 'Sul',
			'Centro-Oeste' => 'Centro-Oeste',
			'Centro-Sul' => 'Centro-Sul',
	);

	public static $tipos_sanguineos = array (
			'A positivo' => 'A positivo',
			'A negativo' => 'A negativo',
			'O positivo' => 'O positivo',
			'O negativo' => 'O negativo',
			'AB positivo' => 'AB positivo',
			'AB negativo' => 'AB negativo',
			'B positivo' => 'B positivo',
			'B negativo' => 'B negativo',
			'Não Sabe' => 'Não Sabe',
	);

	public static $ocupacoes_imovel = array (
			'Próprio' => 'Próprio',
			'Alugado' => 'Alugado',
			'Invalido' => 'Inválido',
			'Cedido' => 'Cedido',
			'Doacao' => 'Doação',
			'Outros' => 'Outros',
	);

	public static $tipos_habitacao = array (
			'Alvenaria' => 'Alvenaria',
			'Madeira' => 'Madeira',
			'Taipa' => 'Taipa',
			'Mista' => 'Mista',
			'Outros' => 'Outros',
	);

	public static $instalacoes_hidraulicas = array (
			'Encanada' => 'Encanada',
			'Nao Encanada' => 'Não Encanada',
			'Cacimba' => 'Cacimba',
			'Poco' => 'Poço',
			'Outros' => 'Outros',
	);

	public static $instalacoes_eletricas = array (
			'Ligacao Oficial' => 'Ligação Oficial',
			'Ligacao Nao Oficial' => 'Ligação Não Oficial (Gato)',
			'Nao Possui' => 'Não Possui',
			'Outros' => 'Outros',
	);

	public static $renda_familiar = array(
			'Abaixo de 1 Salario Minimo' => 'Abaixo de 1 Salário Mínimo',
			'De 1 a 2 Salarios Minimos' => 'De 1 a 2 Salários Mínimos',
			'De 2 a 3 Salarios Minimos' => 'De 2 a 3 Salários Mínimos',
			'De 3 a 4 Salarios Minimos' => 'De 3 a 4 Salários Mínimos',
			'Acime de 4 Salarios Minimos' => 'Acime de 4 Salarios Minimos',
	);

	public static $status = array(
			'Em espera'=> 'Em Espera',
			'Ativo' => 'Ativo',
			'Ausente' => 'Ausente',
			'Liberado' => 'Liberado',
			'Óbito' => 'Óbito',
	);

	public $caracteristicas = array();

	public function setCaracteristica ($caracteristica) {
		if($this->caracteristicas)
			$this->caracteristicas->add($caracteristica);

		echo "$caracteristica";

	}

	public function setAtributes($array, $arrayPerson) {
		$this->attributes = $array;
		if($this->pessoa != null) {
			$this->pessoa->attributes = $arrayPerson;
		}
	}

	public function validateData() {
		$result = false;
		if($this->pessoa != null) {
			$result = $this->pessoa->validate() && $this->validate();

		}
		echo 'result:'.$result;
		return $result;
	}

	public function save($runValidation = true, $attributes = NULL) {
		
		if($this->pessoa != null) {
			$this->pessoa->save();
			$this->pessoa_id = $this->pessoa->id;
		} 
		
		parent::save();


	}

	public function deleteData() {
		CaracteristicaAluno::model()->deleteAllByAttributes(array('aluno_id'=>$this->id));
		$turmas = TurmaHasAluno::model()-findAllByAttributes(array('aluno_id'=>$this->id));

		if($turmas != null && !empty($turmas)) {
			foreach($turmas as $turma) {
				$turma->delete();
			}
		}

		Pessoa::model()->deleteByPk($this->pessoa_id);
		if($this->responsavel_id != null) {
			Responsavel::model()->deleteByPk($this->responsavel_id);
		}
		delete();
	}

	/**
	 * @return string the associated database table name
	 */
	public function tableName()
	{
		return 'aluno';
	}

	/**
	 * Retrieves a list of models based on the current search/filter conditions.
	 *
	 * Typical usecase:
	 * - Initialize the model fields with values from filter form.
	 * - Execute this method to get CActiveDataProvider instance which will filter
	 * models according to data in model fields.
	 * - Pass data provider to CGridView, CListView or any similar widget.
	 *
	 * @return CActiveDataProvider the data provider that can return the models
	 * based on the search/filter conditions.
	 */
	public function search($parameter, $user_id)
	{
		// @todo Please modify the following code to remove attributes that should not be searched.

		$criteria=new CDbCriteria;

		if($user_id != 1) {
			$criteria->addCondition('polo_id = :polo_id');
			$criteria->params = array(':polo_id' => $parameter);
		}

		$criteria->with=array('pessoa', 'polo');
		if(strlen($this->search_nome))
			$criteria->addSearchCondition('pessoa.nome',$this->search_nome,true);
		
		if(strlen($this->search_genero))
			$criteria->addSearchCondition('pessoa.genero', $this->search_genero, true);
		
		$criteria->compare('id',$this->id);
		$criteria->compare('responsavel_id',$this->responsavel_id);
		$criteria->compare('pessoa_id',$this->pessoa_id);
		$criteria->compare('polo_id',$this->polo_id);
		$criteria->compare('atendente_id',$this->atendente_id);
		$criteria->compare('foto',$this->foto,true);
		$criteria->compare('renda_familiar',$this->renda_familiar,true);
		$criteria->compare('situacao_escolar',$this->situacao_escolar,true);
		$criteria->compare('certidao_numero',$this->certidao_numero,true);
		$criteria->compare('certidao_folha',$this->certidao_folha,true);
		$criteria->compare('certidao_livro',$this->certidao_livro,true);
		$criteria->compare('certidao_cartorio',$this->certidao_cartorio,true);
		$criteria->compare('tipo_sanguineo',$this->tipo_sanguineo,true);
		$criteria->compare('estado_civil',$this->estado_civil,true);
		$criteria->compare('profissao',$this->profissao,true);
		$criteria->compare('bairro',$this->bairro,true);
		$criteria->compare('zona',$this->zona,true);
		$criteria->compare('ponto_referencia',$this->ponto_referencia,true);
		$criteria->compare('ocupacao_imovel',$this->ocupacao_imovel,true);
		$criteria->compare('tipo_habitacao',$this->tipo_habitacao,true);
		$criteria->compare('hidraulica',$this->hidraulica,true);
		$criteria->compare('eletrica',$this->eletrica,true);
		$criteria->compare('nome_escola',$this->nome_escola,true);
		$criteria->compare('zona_escola',$this->zona_escola,true);
		$criteria->compare('inicio_deficiencia',$this->inicio_deficiencia,true);
		$criteria->compare('status',$this->status,true);
		$criteria->compare('observacao',$this->observacao,true);
		$criteria->compare('falar_tele',$this->falar_tele,true);
		$criteria->compare('falar_cel',$this->falar_cel,true);

		return new CActiveDataProvider($this, array(
				'criteria'=>$criteria,
		));
	}


	/**
	 * @return array validation rules for model attributes.
	 */
	public function rules()
	{
		// NOTE: you should only define rules for those attributes that
		// will receive user inputs.
		return array(
				array('atendente_id, renda_familiar, situacao_escolar', 'required','message'=>'Campo {attribute} está vazio.'),
				array('responsavel_id, pessoa_id, polo_id, atendente_id', 'numerical', 'integerOnly'=>true, 'message'=>'Campo {attribute} deve conter apenas numeros.'),
				array('foto', 'file','types'=>'jpg, gif, png', 'allowEmpty'=>true, 'on'=>'insert'),
				array('foto', 'file','types'=>'jpg, gif, png', 'allowEmpty'=>true, 'on'=>'update'),
				array('foto', 'length', 'max'=>255, 'on'=>'insert,update', 'message'=>'Campo {attribute} tamanho máximo atingido.'),
				array('falar_tele, falar_cel, ponto_referencia, nome_escola, observacao', 'length', 'max'=>250, 'message'=>'Campo {attribute} limite atingido.'),
				array('situacao_escolar, certidao_numero, certidao_folha, certidao_livro, certidao_cartorio, tipo_sanguineo, estado_civil, bairro, profissao, zona, ocupacao_imovel, tipo_habitacao, hidraulica, eletrica, zona_escola, status', 'length', 'max'=>45),
				array('inicio_deficiencia', 'safe'),
				// The following rule is used by search().
				// @todo Please remove those attributes that should not be searched.
				array('id, responsavel_id, pessoa_id, polo_id, atendente_id, foto, renda_familiar, situacao_escolar, certidao_numero, certidao_folha, certidao_livro, certidao_cartorio, tipo_sanguineo, estado_civil, profissao, zona, ponto_referencia, ocupacao_imovel, tipo_habitacao, hidraulica, eletrica, nome_escola, zona_escola, inicio_deficiencia, observacao, search_nome, search_genero', 'safe', 'on'=>'search'),
		);
	}

	/**
	 * @return array relational rules.
	 */
	public function relations()
	{
		// NOTE: you may need to adjust the relation name and the related
		// class name for the relations automatically generated below.
		return array(
				'atendente' => array(self::BELONGS_TO, 'Funcionario', 'atendente_id'),
				'polo' => array(self::BELONGS_TO, 'Polo', 'polo_id'),
				'pessoa' => array(self::BELONGS_TO, 'Pessoa', 'pessoa_id'),
				'responsavel' => array(self::BELONGS_TO, 'Responsavel', 'responsavel_id'),
				'alunoHasCaracteristicas' => array(self::HAS_MANY, 'AlunoHasCaracteristica', 'aluno_id'),
				'triagems' => array(self::HAS_MANY, 'Triagem', 'aluno_id'),
				'turmaHasAlunos' => array(self::HAS_MANY, 'TurmaHasAluno', 'aluno_id'),
		);
	}

	/**
	 * @return array customized attribute labels (name=>label)
	 */
	public function attributeLabels()
	{
		return array(
				'id' => 'ID',
				'responsavel_id' => 'Responsável',
				'pessoa_id' => 'Pessoa',
				'polo_id' => 'Polo',
				'atendente_id' => 'Atendente',
				'foto' => 'Foto',
				'renda_familiar' => 'Renda Familiar',
				'situacao_escolar' => 'Situacao Escolar',
				'certidao_numero' => 'Numero da Certidão',
				'certidao_folha' => 'Folha da Certidão',
				'certidao_livro' => 'Livro da Certidão',
				'certidao_cartorio' => 'Cartório da Certidao',
				'tipo_sanguineo' => 'Tipo Sanguíneo',
				'estado_civil' => 'Estado Civil',
				'profissao' => 'Profissao',
				'bairro' => 'Bairro',
				'zona' => 'Zona',
				'ponto_referencia' => 'Ponto de Referência',
				'ocupacao_imovel' => 'Ocupação do Imóvel',
				'tipo_habitacao' => 'Tipo de Habitação',
				'hidraulica' => 'Energia Hidráulica',
				'eletrica' => 'Energia Elétrica',
				'nome_escola' => 'Nome da Escola',
				'zona_escola' => 'Zona da Escola',
				'inicio_deficiencia' => 'Inicio da Deficiência',
				'observacao' => 'Observação',
				'falar_tele' => 'Telefone',
				'falar_cel' => 'Celular',
				'status' => 'Status',
				'data_entrada' => 'Data de Entrada',
				'search_nome' => 'Nome',
				'search_genero' => 'Sexo',
		);
	}
	
	/**
	 * Returns the static model of the specified AR class.
	 * Please note that you should have this exact method in all your CActiveRecord descendants!
	 * @param string $className active record class name.
	 * @return Aluno the static model class
	 */
	public static function model($className=__CLASS__)
	{
		return parent::model($className);
	}
}
